package org.qq.tv.web.task;
import org.qq.tv.web.jsoup.*;
import org.qq.tv.web.mapper.pojo.task.*;
import org.qq.tv.web.service.UpDateService;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class TaskNet implements Runnable, IsihuHtml {
    //更新数据存储对象
    private UpTaskDate upDate = null;
    private UpDateService ups = null;
    private String https = "https://";

    public TaskNet(UpDateService up, UpTaskDate date) {
        this.ups = up;
        this.upDate = date;
    }

    @Override
    public void run() {
        //任务类型 判断
        switch (this.upDate.getTaskTyep()) {
            case UpTaskDate.addGroup:
                //获取网站分组数据
                this.addgroup();
                break;
            case UpTaskDate.paginfCount:
                //去网上获取 条目分页数据 用于计算页面数量
                this.paginfCount();
                break;
            case UpTaskDate.videoItem:
                //获取网站视频条目
                this.videoItem();
                break;
            case UpTaskDate.videoMessage:
                //获取网站视频信息
                this.videoMessage();
                break;
        }

        //释放任务数量
        this.ups.startStopNet(false);
    }

    /**
     * 去网上获取视频信息
     */
    private void videoMessage() {
        //拼接地址
        this.https = this.https + this.upDate.getTableHostWeb().getPath();
        this.https = this.https + this.upDate.getTableVideoMessage().getHtmlweb();
        //联网获取数据
        String date = this.ups.getHttp().getHtmlToString(this.https, 50);
        if (date.equals("") || date == null) return;
        //解析四虎视频信息
        SihuHtml.videoMessage(this, date);


    }

    /**
     * 获取网站视频条目
     */
    private void videoItem() {
        //拼接地址
        this.https = this.https + this.upDate.getHtmlDate();

        //联网获取数据
        String date = this.ups.getHttp().getHtmlToString(this.https, 50);
        if (date.equals("") || date == null) return;
        //四虎 网站 解析 视频条目 HTML
        SihuHtml.videoItem(this, date);

    }

    /**
     * 去网上获取 条目分页数据 用于计算页面数量
     */
    private void paginfCount() {
        //拼接地址
        this.https = this.https + this.upDate.getTableHostWeb().getPath();
        this.https = this.https + this.upDate.getTableGroupsItem().getPath();
        //联网获取数据
        String date = this.ups.getHttp().getHtmlToString(this.https, 50);
        if (date.equals("") || date == null) return;
        //解析四虎html
        //计算分组条目分页
        SihuHtml.groupItemCount(this, date);
    }

    private void addgroup() {
        this.https = this.https + this.upDate.getTableHostWeb().getPath() + "/Enter/home.html";
        String date = this.ups.getHttp().getHtmlToString(this.https, 50);
        if (date.equals("") || date == null) return;
        //提交任务到数据库任务线程去
        UpTaskDate taskDate = UpTaskDate.newUpTaskDate(this.upDate);
        taskDate.setTaskTyep(UpTaskDate.addGroup);
        taskDate.setHtmlDate(date);
        this.ups.submitSql(taskDate);

    }

    @Override
    public void sihuGroup(UpTaskDate date) {

    }

    @Override
    public void sihuGroupItem(UpTaskDate date) {

    }

    @Override
    public void groupItemCount(String date, int count) {
        UpTaskDate d = UpTaskDate.newUpTaskDate(this.upDate);
        d.setTaskTyep(UpTaskDate.videoItem);
        String uiri = d.getTableHostWeb().getPath();
        uiri = uiri + d.getTableGroupsItem().getPath();
        uiri = uiri + "/index.html";
        d.setHtmlDate(uiri);
        //提交联网任务
        this.ups.submitNet(d);
        //System.out.println(d.getHtmlDate());
        //计算网页数量
        for (int i = 2; i <= count; i++) {
            UpTaskDate duir = UpTaskDate.newUpTaskDate(this.upDate);
            duir.setTaskTyep(UpTaskDate.videoItem);
            String uir = duir.getTableHostWeb().getPath();
            uir = uir + duir.getTableGroupsItem().getPath();
            uir = uir + "/index_" + i + ".html";
            duir.setHtmlDate(uir);

            //提交联网任务
            this.ups.submitNet(duir);

        }
    }

    @Override
    public void videoItem(String date) {
        //提交任务到数据库线程去处理
        UpTaskDate dateTask = UpTaskDate.newUpTaskDate(this.upDate);
        dateTask.setTaskTyep(UpTaskDate.videoItem);
        dateTask.getTableVideoMessage().setHtmlweb(date);
        this.ups.submitSql(dateTask);

    }

    @Override
    public void videoItem(String html, String name) {
        //提交任务到数据库线程去处理
        UpTaskDate dateTask = UpTaskDate.newUpTaskDate(this.upDate);
        dateTask.setTaskTyep(UpTaskDate.videoItem);
        dateTask.getTableVideoMessage().setName(name);
        dateTask.getTableVideoMessage().setHtmlweb(html);
        this.ups.submitSql(dateTask);
        // System.out.println("提交任务到数据库线程去处理");
    }

    /*
     *解析四虎 网站视频播放页面
     * 获取视频基本信息
     * 1 uir m3u8播放地址
     * 2 tmp 视频上传时间
     * 3 name 视频昵称
     * 4 视频下载链接
     */
    @Override
    public void videoMessage(String name, String update, String mp4, String m3u8) {
        //提交视频信息到数据库
        UpTaskDate date = UpTaskDate.newUpTaskDate(this.upDate);
        date.setTaskTyep(UpTaskDate.videoMessage);
        date.getTableVideoMessage().setVideoGroupId(this.upDate.getTableGroups().getId());
        date.getTableVideoMessage().setGroupItemId(this.upDate.getTableGroupsItem().getId());
        //  date.getTableVideoMessage().setName(name);
        date.getTableVideoMessage().setHttpmp4(mp4);
        date.getTableVideoMessage().setPlaym3u8(m3u8);
        //判断视频更新时间是否为空
        if (update == null) {
            //获取当前系统日期
            LocalDate currentDate = LocalDate.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            String formattedDate = currentDate.format(formatter);
            date.getTableVideoMessage().setUptime(formattedDate);
        } else {
            date.getTableVideoMessage().setUptime(update);
        }

        //提交任务到数据库去添加
        this.ups.submitSql(date);
    }
}
